﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

using YouHP.Model;

namespace YouHP.IDAL
{
    public interface IDisease
    {
        #region 疾病增删改查基本操作
        bool AddDisease(DiseaseInfo diseaseInfo);
        bool UpdateDisease(DiseaseInfo diseaseInfo);
        bool DeleteDisease(int[] dszitemid);
        DiseaseInfo GetDiseaseInfo(int id);
        int GetDiseaseIdByName(string diseaseName);
        #endregion

        #region 疾病列表以及搜索操作

        // 获得该疾病的几个高发症状
        List<SymptomAndIncidenceCount> GetHighIncidenceSymptomsOfDisease(int diseaseId, int count);

        // 获得治疗该疾病的几个常用治疗
        List<TreatmentAndUsedCount> GetMostFrequentUsedTreatmentsOfDisease(int diseaseId, int count);

        // 获得患此种疾病的病人的按地区分布的统计列表
        List<ProvinceAndPatientCount> GetPatientLocationDistributionStatOfDisease(int diseaseId, int count);

        List<DiseaseInfo> GetDiseaseList(int pageSize, int pageIndex, string condStr, out int count);

        /*检索疾病信息并且带有典型病人的信息（用在前台）*/
        List<DiseaseInfo> GetDiseaseListWithPatientInfo(int pageSize, int pageIndex, string condStr, out int count);

        /*检索Top n个疾病*/
        List<DiseaseInfo> GetHottestDiseases(int n);

        /*按照疾病名称来检索疾病*/
        List<DiseaseInfo> GetDiseaseByName(int pageSize, int pageIndex, string keyword, out int count);

        /*按照疾病名称拼音字母来检索疾病*/
        List<DiseaseInfo> GetDiseaseByPinYin(int pageSize, int pageIndex, string pinYin, out int count);

        /*按照疾病类型来检索疾病*/
        List<DiseaseInfo> GetDiseaseByType(int pageSize, int pageIndex, int type, out int count);

        #endregion

        #region 疾病类型基本操作
        bool AddDiseaseType(DiseaseTypeInfo info);
        bool DelDiseaseType(int[] itemIds);
        bool UpdateDiseaseType(DiseaseTypeInfo info);
        DiseaseTypeInfo GetDiseaseType(int typeId);
        #endregion

        #region 疾病所相关症状增加删除操作

        /*采用批处理方式来批量增加疾病的相关症状*/
        bool AddDiseaseSymptom(int diseaseId, List<DiseaseSymptomInfo> symptomList);

        /*采用批处理方式来更新疾病的相关症状，说明：先删除老的数据，再添加新的数据*/
        bool UpdateDiseaseSymptom(int diseaseId, int type, List<DiseaseSymptomInfo> symptomList);

        /*根据疾病症状关联表id删除纪录*/
        bool DelDiseaseSymptoms(int[] dsIds);

        /*获取疾病相关的所有症状列表，包括主要和次要*/
        List<DiseaseSymptomInfo> GetDiseaseSymptomList(int dszId);

        /*获取疾病相关的某种类型的症状列表*/
        List<DiseaseSymptomInfo> GetDiseaseSymptomList(int dszId, int type);

        /*获取可选的症状列表（如：type=0，则表示次要症状的可选集*/
        List<SymptomInfo> GetSelectedSymptomCollect(int diseaseId, int type);
        #endregion

        #region 疾病所相关治疗增加删除操作

        /*采用批处理方式来批量增加疾病的相关治疗*/
        bool AddDiseaseTreatment(int diseaseId, List<DiseaseTreatmentInfo> treatmentList);

        /*根据疾病治疗关联表id删除纪录*/
        bool DelDiseaseTreatments(int[] dtIds);

        /*获取疾病相关的所有治疗列表*/
        List<DiseaseTreatmentInfo> GetDiseaseTreatmentList(int dszId);
        /*获取症状相关的所有疾病列表*/
        List<DiseaseInfo> GetDiseaseListBySymptomId(int symptomId,int n);
         /*获取治疗相关的所有疾病列表*/
        List<DiseaseInfo> GetDiseaseTreatmentListByTreatmentId(int treatmentId,int n);
        /*采用批处理方式来更新疾病的相关症状，说明：先删除老的数据，再添加新的数据*/
        bool UpdateDiseaseTreatment(int diseaseId, List<DiseaseTreatmentInfo> treatmentList);

        #endregion

        #region 疾病所相关实验室指标增加删除操作

        /*采用批处理方式来批量增加疾病的相关实验室指标*/
        bool AddDiseaseLabcheck(int diseaseId, List<DiseaseLabcheckInfo> labcheckList);

        /*根据疾病实验室指标关联表id删除纪录*/
        bool DelDiseaseLabchecks(int[] dlIds);

        /*获取疾病相关的所有实验室指标列表*/
        List<DiseaseLabcheckInfo> GetDiseaseLabcheckList(int dszId);

        /*采用批处理方式来更新疾病的相关实验室指标，说明：先删除老的数据，再添加新的数据*/
        bool UpdateDiseaseLabcheck(int diseaseId, List<DiseaseLabcheckInfo> labcheckList);

        #endregion

        #region 疾病类型列表以及搜索操作

        /*根据疾病的父类获取疾病类型列表*/
        List<DiseaseTypeInfo> GetDiseaseTypesList(int parentType);

        /*返回所有的疾病类型*/
        List<DiseaseTypeInfo> GetDiseaseTypesList();

        #endregion

        #region 疾病图表设置

        DiseaseGraphSettingInfo GetDiseaseGraphSettingInfo(int diseaseId);
        bool AddDiseaseGraphSetting(DiseaseGraphSettingInfo info);
        bool UpdateDiseaseGraphSetting(DiseaseGraphSettingInfo info);

        #endregion

        #region 疾病统计

        // 统计某个省份下属城市的疾病分布
        // provinceId = 0 时统计省份级的疾病分布
        List<DiseaseStatRegionInfo> GetDiseaseStatRegion(int did, int provinceId);

        int GetDiseaseStatAge(int did, int startAge, int endAge);

        int GetDiseaseStatDuration(int did, int startPoint, int endPoint);

        List<DiseaseStatSymptomInfo> GetDiseaseStatSymptom(int did);

        List<DiseaseStatTreamentInfo> GetDiseaseStatTreatment(int did);

        #endregion

        
    }
}